import axios from "axios";
// import { promises } from "dns";


//导入自己创建的pinia存储库
// import pinia from "../stores/index"

//引入element-plus的提示框
import { ElMessage } from 'element-plus'
//导入原来的pinia的stroe
import{useSysUserStore}from "../stores/counter"

//导入路由对象
// import { useRouter } from "vue-router";
import router from "../router/index";


axios.defaults.baseURL = 'http://localhost:5165'
axios.defaults.headers = {
    
    post: {//当请求方式为post时,请求头使用表单提交
        "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"//表单提交
    }
}


// let instance=axios.create({
//     //创建实例时设置配置默认
//     baseURL:"",//请求的域名/基本地址
//     timeout:2000,//请求超时时间
//     headers:{//请求头
//         token:"",
//         post:{//当请求方式为post时,请求头使用表单提交
//             "Content-Type":"application/x-www-form-urlencoded;charset=UTF-8"//表单提交
//         }
//     }
// });


let token1="111111111111111111111111111111"
// 添加请求拦截器
axios.interceptors.request.use(function (config) {

    // debugger
    // 在发送请求之前做些什么
    console.log('请求拦截器获取到的数据')

        // //从sessionStorage中获取token
        // let token=JSON.parse(sessionStorage.getItem("sysUser"))
        // if(token){
        //     config.headers.Authorization='Bearer '+token.token
        //     //自己起名的token属性放在请求头
        //     config.headers.token=token.token
        //     console.log('请求拦截器获取到的token，并添加到请求头中')
        // }
        
        //创建一个实例,
        let sysUserStore=useSysUserStore()
        //重pinia中获取token
        if(sysUserStore.token){
            config.headers.Authorization='Bearer '+sysUserStore.token

             //把pinia中的token放在请求头
            config.headers.token=sysUserStore.token
            

        }
        
        //使用标准token验证
        // config.headers.Authorization='Bearer '+ token

        //自己验证、Authorization这个属性也可以改，但是需要自己封装，而Authorization是已经封装好了的，可以方便找到
        
      
        //用户最后一次请求数据时间搓
        sysUserStore.lastActionDate=new Date().getTime()
  
    return config;
  }, function (error) {
  
    // 对请求错误做些什么
    console.log('请求错误  拦截器获取到的数据')
    return Promise.reject(error);
  });
  
  


// 添加响应拦截器

axios.interceptors.response.use(function (response) {

    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    // debugger


    console.log('响应拦截器 ', response)

    //验证响应状态码是否对应过期状态码
    if(response.data.code==401){
    //    let router= useRouter()
        router.replace('/login')
    }

    if (response.data.code != 0) {
        
        ElMessage({
            message: response.data.msg,
            type: 'error',
            duration: 2000
        })
        return Promise.reject();
    } 
    else 
    {
        return response;
    }

}, function (error) {

    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    console.log('相应  错误拦截器获取到的数据')
    return Promise.reject(error);
});



export function get(url, params,token) {//params是可选的,它们是请求的参数
    return new Promise((resolve, reject) => {
        axios.get(url, {
            params: params
            // ,headers:{
            //     Authorization:'Bearer '+token
            // }
        })
            .then(res => {
                resolve(res.data);//成功时调用resolve,将数据返回
            })
            .catch(err => {
                // reject(err.data);//失败时调用reject,将错误返回
            })
    });
}

export function post(url, params,token) {
    return new Promise((resolve, reject) => {
        axios.post(url, params
        //     ,{
        //     headers:{
        //         Authorization:'Bearer '+token
        //     }}
        )
            .then(res => {
                //  console.log(res)
                resolve(res.data);
            }).catch(err => {
                // reject(err);
            })
    });

}

export function requst(url, Type, params) {
    if (Type == "get") {
        return get(url, params)
    } else if (Type == "post") {
        return post(url, params);
    } else {
        return
    }

    // return new  Promise((resolve,reject)=>{
    //     axios.post(url,params)
    //     .then(res=>{
    //         //  console.log(res)
    //         resolve(res.data);
    //     }).catch(err=>{
    //         // reject(err);
    //     })
    // });

}